package com.itheima.case2.web;

import com.itheima.case2.pojo.vo.*;
import com.itheima.case2.service.UserService;
import com.itheima.case2.utils.BaseController;
import com.itheima.case2.utils.BeansFactory;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/user/*")
public class UserServlet extends BaseServlet {
    public void selectUser(HttpServletRequest request, HttpServletResponse response) {
        try {
            //使用工具类获取传来的json数据并封装到vo中的实体类QueryPageBean中
            QueryPageBean queryPageBean = BaseController.parseJSON2Object(request, QueryPageBean.class);
            //使用反射创建业务层对象
            UserService userService = BeansFactory.getInstance("userService");
            //使用业务曾对象中的查找方法 将结果存入分页对象中
            PageResult pageResult = userService.selectUser(queryPageBean);
            //创建Result对象存储返回信息
            Result result = new Result(true, "恭喜你查询成功", pageResult);
            //响应给前端
            BaseController.printResult(response, result);
        } catch (Exception e) {
            e.printStackTrace();
            //查询失败
            try {
                Result result = new Result(false, "菜");
                //响应给前端
                BaseController.printResult(response, result);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }

    public void updateUser(HttpServletRequest request, HttpServletResponse response) {
        try {
            //使用工具类获取传来的json数据并封装到vo中的实体类UpdateUser中
            UpdateUser updateUser = BaseController.parseJSON2Object(request, UpdateUser.class);
            //使用反射创建业务层对象
            UserService userService = BeansFactory.getInstance("userService");
            //使用业务对象中的修改方法
            userService.updateUser(updateUser);
            //创建Result对象存储返回信息
            Result result = new Result(true, "恭喜你修改成功");
            //响应给前端
            BaseController.printResult(response, result);
        } catch (Exception e) {
            e.printStackTrace();
            //查询失败
            try {
                Result result = new Result(false, "失败，必不可能是代码有问题");
                //响应给前端
                BaseController.printResult(response, result);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

    }

    public void deleteUser(HttpServletRequest request, HttpServletResponse response) {
        try {
            //使用工具类获取传来的json数据并封装到vo中的实体类UpdateUser中
            UpdateUser deleteUser = BaseController.parseJSON2Object(request, UpdateUser.class);
            //使用反射创建业务层对象
            UserService userService = BeansFactory.getInstance("userService");
            //使用业务对象中的添加方法
            userService.deleteUser(deleteUser);
            //创建Result对象存储返回信息
            Result result = new Result(true, "恭喜你删除成功");
            //响应给前端
            BaseController.printResult(response, result);
        } catch (Exception e) {
            e.printStackTrace();
            try {
                //创建Result对象存储返回信息
                Result result = new Result(false, "删除失败，这什么破电脑？");
                //响应给前端
                BaseController.printResult(response, result);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }

    public void addUser(HttpServletRequest request, HttpServletResponse response) {
        try {
            //使用工具类获取传来的json数据并封装到vo中的实体类AddUser中
            AddUser addUser = BaseController.parseJSON2Object(request, AddUser.class);
            //使用反射创建业务层对象
            UserService userService = BeansFactory.getInstance("userService");
            //使用业务对象中的添加方法
            userService.addUser(addUser);
            //创建Result对象存储返回信息
            Result result = new Result(true, "恭喜你添加成功");
            //响应给前端
            BaseController.printResult(response, result);
        } catch (Exception e) {
            e.printStackTrace();
            try {
                //创建Result对象存储返回信息
                Result result = new Result(false, "添加失败，是不是网不好？");
                //响应给前端
                BaseController.printResult(response, result);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }

    }
}
